package cn.edu.tju.elm.repository;

import cn.edu.tju.elm.model.Complain;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * ClassName: ComplainRepository
 * Package: cn.edu.tju.elm.repository
 * Description: 投诉数据访问层
 *
 * @Author System
 * @Create 2025/10/31
 * @Version 1.0
 */
@Repository
public interface ComplainRepository extends JpaRepository<Complain, Long> {

    /**
     * 根据用户ID查询投诉列表（不包含已删除）
     */
    List<Complain> findByCustomerIdAndDeletedFalse(Long customerId);

    /**
     * 根据商家ID查询投诉列表（不包含已删除）
     */
    List<Complain> findByBusinessIdAndDeletedFalse(Long businessId);

    /**
     * 根据订单ID查询投诉（不包含已删除）
     */
    Optional<Complain> findByOrderIdAndDeletedFalse(Long orderId);

    /**
     * 根据状态查询投诉列表（不包含已删除）
     */
    List<Complain> findByStateAndDeletedFalse(Integer state);

    /**
     * 查询所有投诉（不包含已删除）
     */
    List<Complain> findByDeletedFalse();

    /**
     * 检查订单是否已存在投诉
     */
    boolean existsByOrderIdAndDeletedFalse(Long orderId);

    /**
     * 统计用户的投诉数量
     */
    @Query("SELECT COUNT(c) FROM Complain c WHERE c.customer.id = :customerId AND c.deleted = FALSE")
    Long countByCustomerId(@Param("customerId") Long customerId);

    /**
     * 统计商家的投诉数量
     */
    @Query("SELECT COUNT(c) FROM Complain c WHERE c.business.id = :businessId AND c.deleted = FALSE")
    Long countByBusinessId(@Param("businessId") Long businessId);

    /**
     * 统计商家待处理的投诉数量
     */
    @Query("SELECT COUNT(c) FROM Complain c WHERE c.business.id = :businessId AND c.state = 0 AND c.deleted = FALSE")
    Long countPendingByBusinessId(@Param("businessId") Long businessId);
}

